home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / dev / e / Text_Plug2.lha / text_plug.e < prev    next >
Encoding:
Text File  |  1996-09-27  |  2.3 KB  |  82 lines

  1. OPT OSVERSION=37, MODULE
  2.  
  3. MODULE 'tools/EasyGUI',
  4.        'graphics/rastport',
  5.        'graphics/text',
  6.        'intuition/screens',
  7.        'intuition/intuition',
  8.        '*fonts'
  9.  
  10. EXPORT DEF deffont:PTR TO textfont, deffixedfont:PTR TO textfont
  11.  
  12. EXPORT OBJECT text_plug OF plugin
  13.   PRIVATE
  14.   str,   slen, sfont:PTR TO textfont
  15.   label, llen, lfont:PTR TO textfont
  16.   min, hgt, base, spos
  17. ENDOBJECT
  18.  
  19. EXPORT PROC create(str, label=NIL, min=0, sfont=NIL:PTR TO textfont,
  20.                    lfont=NIL:PTR TO textfont) OF text_plug
  21.   DEF textrp:PTR TO rastport, mb
  22.   self.str:=IF str THEN str ELSE ''
  23.   self.slen:=StrLen(self.str)
  24.   IF (sfont=NIL) AND (deffixedfont=NIL) THEN Raise("DFNT")
  25.   self.sfont:=IF sfont THEN sfont ELSE deffixedfont
  26.   self.base:=self.sfont.baseline
  27.   self.hgt:=self.sfont.ysize
  28.   self.label:=label
  29.   NEW textrp
  30.   SetFont(textrp, self.sfont)
  31.   self.min:=IF min THEN min*self.sfont.xsize ELSE TextLength(textrp,self.str,self.slen)
  32.   IF label
  33.     self.llen:=StrLen(label)
  34.     IF (lfont=NIL) AND (deffont=NIL) THEN Raise("DFNT")
  35.     self.lfont:=IF lfont THEN lfont ELSE deffont
  36.     mb:=Max(self.base, self.lfont.baseline)
  37.     self.hgt:=mb+Max(self.hgt-self.base,self.lfont.ysize-self.lfont.baseline)
  38.     self.base:=mb
  39.     SetFont(textrp, self.lfont)
  40.     self.spos:=4+TextLength(textrp, self.label, self.llen)
  41.     self.min:=self.min+self.spos
  42.   ELSE
  43.     self.spos:=0
  44.   ENDIF
  45.   END textrp
  46. ENDPROC
  47.  
  48. EXPORT PROC will_resize() OF text_plug IS RESIZEX
  49.  
  50. EXPORT PROC min_size(fh) OF text_plug IS self.min, self.hgt
  51.  
  52. EXPORT PROC render(x,y,xs,ys,win) OF text_plug IS self.draw(win, self.label)
  53.  
  54. PROC draw(win:PTR TO window,label=NIL) OF text_plug
  55.   DEF res:textextent, fit, old, f, r:PTR TO rastport
  56.   r:=win.rport
  57.   f:=r.font
  58.   IF label
  59.     SetFont(r, self.lfont)
  60.     SetAPen(r, 1)
  61.     Move(r, self.x, self.y+self.base)
  62.     Text(r, self.label, self.llen)
  63.   ELSE
  64.     old:=SetStdRast(r)
  65.     Box(self.x+self.spos, self.y, self.x+self.xs-1, self.y+self.ys-1, 0)
  66.     SetStdRast(old)
  67.   ENDIF
  68.   SetFont(r, self.sfont)
  69.   IF fit:=TextFit(r, self.str,self.slen, res,NIL,1, self.xs-self.spos,self.ys)
  70.     SetAPen(r, 1)
  71.     Move(r, self.x+self.spos, self.y+self.base)
  72.     Text(r, self.str, fit)
  73.   ENDIF
  74.   SetFont(r, f)
  75. ENDPROC
  76.  
  77. EXPORT PROC settext(gh:PTR TO guihandle, str) OF text_plug
  78.   self.str:=IF str THEN str ELSE ''
  79.   self.slen:=StrLen(self.str)
  80.   self.draw(gh.wnd)
  81. ENDPROC
  82.